/*
* Copyright (C) 2010-2012 Magnus Skjegstad
* 
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
* 
* The latest version of this library can be downloaded from http://mist-pubsub.googlecode.com
* 
*/
package com.skjegstad.mist2.modules.udp;

import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;

/**
 *
 * @author Magnus Skjegstad
 */
public class MessageContainer implements Externalizable {
    private byte messageType;
    private Externalizable messageObject;

    public MessageContainer() { }

    public MessageContainer(Externalizable messageObject) throws ClassNotFoundException {
        this.messageObject = messageObject;
        if (messageObject instanceof BeaconMessage)
            this.messageType = 0;
        else
        if (messageObject instanceof DataFragmentMessage)
            this.messageType = 1;
        else
            throw new ClassNotFoundException("Unknown object type");
    }

    public Object getMessageObject() {
        return messageObject;
    }

    public byte getMessageType() {
        return messageType;
    }

    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
        messageType = in.readByte();
        if (messageType == 0) {
            messageObject = new BeaconMessage();
        } 
        else if(messageType == 1) {
            messageObject = new DataFragmentMessage();
        }
        else
            throw new ClassNotFoundException("Unknown message type");
        messageObject.readExternal(in);
    }

    public void writeExternal(ObjectOutput out) throws IOException {
        out.writeByte(messageType);
        messageObject.writeExternal(out);
    }

}
